package com.wanglei.rdd.transform

import org.apache.spark.{SparkConf, SparkContext}

object Spark16_aggreagtebykey {

  def main(args: Array[String]): Unit = {

    //
    val conf = new SparkConf().setMaster("local[2]").setAppName("map")
    val sc = new SparkContext(conf)

    // reduceByKey的分区内和分区间操作一致
    // aggregateByKey的分区内操作和分区间操作可以一致也可以不一致
    val rdd = sc.makeRDD(List('a', 'a', 'c', 'd'), 2)
    val mapRdd = rdd.map(str => (str, str.toInt))

    // 第一个参数表示初始值
    //
    // 第二个参数需要两个参数
    // 第一个表示分区内操作
    // 第二个表示分区间操作
    mapRdd.aggregateByKey(0)(
      (l, r) => Math.max(l, r),
      (l, r) => l + r
    ).collect().foreach(println)
    sc.stop()

  }

}
